package com.cloudfun.campusshare.common.model.dto;

import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import lombok.Data;

/**
 * @author : zhangyongjie
 * @version : 1.0
 * @createTime : 2020/4/21 14:29
 * @description : 统一下单入参
 */
@Data
public class UnifiedOrderDTO {

    /**
     * 微信分配的小程序ID
     */
    @JacksonXmlProperty(localName = "appid")
    private String appId;

    /**
     * 微信支付分配的商户号
     */
    @JacksonXmlProperty(localName = "mch_id")
    private String mchId;

    /**
     * 随机字符串，长度要求在32位以内
     */
    @JacksonXmlProperty(localName = "nonce_str")
    private String nonceStr;

    /**
     * 通过签名算法计算得出的签名值
     */
    @JacksonXmlProperty(localName = "sign")
    private String sign;

    /**
     * 商品简单描述，该字段请按照规范传递，具体请见参数规定
     */
    @JacksonXmlProperty(localName = "body")
    private String body;

    /**
     * 商户系统内部订单号，要求32个字符内，只能是数字、大小写字母_-|*且在同一个商户号下唯一
     */
    @JacksonXmlProperty(localName = "out_trade_no")
    private String outTradeNo;

    /**
     * 订单总金额，单位为分
     */
    @JacksonXmlProperty(localName = "total_fee")
    private Integer totalFee;

    /**
     * 支持IPV4和IPV6两种格式的IP地址。调用微信支付API的机器IP
     */
    @JacksonXmlProperty(localName = "spbill_create_ip")
    private String spbillCreateIp;

    /**
     * 异步接收微信支付结果通知的回调地址，通知url必须为外网可访问的url，不能携带参数。
     */
    @JacksonXmlProperty(localName = "notify_url")
    private String notifyUrl;

    /**
     * 小程序取值如下：JSAPI
     */
    @JacksonXmlProperty(localName = "trade_type")
    private String tradeType = "JSAPI";

    /**
     * trade_type=JSAPI，此参数必传，用户在商户appid下的唯一标识
     */
    @JacksonXmlProperty(localName = "openid")
    private String openid;


    //-----------------以下是非必填参数-----------------------------------------------


    /**
     * 自定义参数，可以为终端设备号(门店号或收银设备ID)，PC网页或公众号内支付可以传"WEB"
     */
    @JacksonXmlProperty(localName = "device_info")
    private String deviceInfo;

    /**
     * 签名类型，默认为MD5，支持HMAC-SHA256和MD5。
     */
    @JacksonXmlProperty(localName = "sign_type")
    private String signType;

    /**
     * 商品详细描述，对于使用单品优惠的商户，该字段必须按照规范上传，详见“单品优惠参数说明”
     */
    @JacksonXmlProperty(localName = "detail")
    private String detail;

    /**
     * 附加数据，在查询API和支付通知中原样返回，可作为自定义参数使用
     */
    @JacksonXmlProperty(localName = "attach")
    private String attach;

    /**
     * 符合ISO 4217标准的三位字母代码，默认人民币：CNY，详细列表请参见货币类型
     */
    @JacksonXmlProperty(localName = "fee_type")
    private String feeType;

    /**
     * 订单生成时间，格式为yyyyMMddHHmmss，如2009年12月25日9点10分10秒表示为20091225091010。
     */
    @JacksonXmlProperty(localName = "time_start")
    private String timeStart;

    /**
     * 订单失效时间，格式为yyyyMMddHHmmss，如2009年12月27日9点10分10秒表示为20091227091010。订单失效时间是针对订单号而言的，由于在请求支付的时候有一个必传参数prepay_id只有两小时的有效期，所以在重入时间超过2小时的时候需要重新请求下单接口获取新的prepay_id
     */
    @JacksonXmlProperty(localName = "time_expire")
    private String timeExpire;

    /**
     * 订单优惠标记，使用代金券或立减优惠功能时需要的参数
     */
    @JacksonXmlProperty(localName = "goods_tag")
    private String goodsTag;


    /**
     * 商品ID
     */
    @JacksonXmlProperty(localName = "product_id")
    private String productId;


    /**
     * 指定支付方式
     */
    @JacksonXmlProperty(localName = "limit_pay")
    private String limitPay;



    /**
     * Y，传入Y时，支付成功消息和支付详情页将出现开票入口。需要在微信支付商户平台或微信公众平台开通电子发票功能，传此字段才可生效
     */
    @JacksonXmlProperty(localName = "receipt")
    private String receipt;

    /**
     * 该字段常用于线下活动时的场景信息上报，支持上报实际门店信息，商户也可以按需求自己上报相关信息。该字段为JSON对象数据，对象格式为{"store_info":{"id": "门店ID","name": "名称","area_code": "编码","address": "地址" }}
     */
    @JacksonXmlProperty(localName = "scene_info")
    private String sceneInfo;
}
